package com.jky.trial.controller;

import com.jky.trial.common.BaseResult;
import com.jky.trial.constant.DataConstant;
import org.apache.shiro.ShiroException;
import org.apache.shiro.authz.UnauthorizedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;
@RestControllerAdvice
public class ExceptionController {
    private static final Logger _logger = LoggerFactory.getLogger(ExceptionController.class);

    // 捕捉shiro的异常
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ExceptionHandler(ShiroException.class)
    public BaseResult handle401(ShiroException e) {
        return new BaseResult(false, "shiro的异常", 401);
    }

    // 捕捉UnauthorizedException
//    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ExceptionHandler(UnauthorizedException.class)
    public BaseResult handle401() {
        return new BaseResult(false, DataConstant.NO_AUTH.toString(), 401);
    }



    // 捕捉其他所有异常
    @ExceptionHandler(Exception .class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public BaseResult globalException(HttpServletRequest request, Throwable ex) {
        ex.printStackTrace();
        return new BaseResult(false, "其他异常", 0);
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if (statusCode == null) {
            return HttpStatus.INTERNAL_SERVER_ERROR;
        }
        return HttpStatus.valueOf(statusCode);
    }
}
